#!/bin/bash

# Git环境Docker容器运行脚本

set -e

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 配置变量
IMAGE_NAME="git-env"
TAG="latest"
FULL_IMAGE_NAME="${IMAGE_NAME}:${TAG}"
CONTAINER_NAME="git-env-dev"
DEV_COMPOSE_FILE="docker-compose.dev.yml"

echo -e "${BLUE}启动Git环境开发容器${NC}"

# 检查Docker是否运行
if ! docker info &> /dev/null; then
    echo -e "${RED}错误: Docker服务未运行，请启动Docker服务${NC}"
    exit 1
fi

# 检查镜像是否存在
if ! docker images --format "{{.Repository}}:{{.Tag}}" | grep -q "^${FULL_IMAGE_NAME}$"; then
    echo -e "${YELLOW}镜像 ${FULL_IMAGE_NAME} 不存在，开始构建...${NC}"
    ./build.sh
fi

# 检查容器是否已存在
if docker ps -a --format "{{.Names}}" | grep -q "^${CONTAINER_NAME}$"; then
    echo -e "${YELLOW}容器 ${CONTAINER_NAME} 已存在${NC}"

    # 检查容器是否正在运行
    if docker ps --format "{{.Names}}" | grep -q "^${CONTAINER_NAME}$"; then
        echo -e "${YELLOW}容器正在运行中${NC}"
        echo -e "${GREEN}前端访问地址: http://localhost:25694${NC}"
        echo -e "${GREEN}后端API地址: http://localhost:7001${NC}"
        exit 0
    else
        echo -e "${YELLOW}停止并删除现有容器${NC}"
        docker stop "${CONTAINER_NAME}" || true
        docker rm "${CONTAINER_NAME}" || true
    fi
fi

# 创建环境变量文件
if [ ! -f ".env" ]; then
    echo -e "${YELLOW}创建.env文件${NC}"
    cp .env.example .env
    echo -e "${GREEN}已创建.env文件，请根据需要修改配置${NC}"
fi

# 创建日志目录
mkdir -p logs/{postgresql,redis,celery,app}

echo -e "${BLUE}启动开发环境...${NC}"

# 使用docker-compose启动服务
if [ -f "${DEV_COMPOSE_FILE}" ]; then
    echo -e "${BLUE}使用docker-compose启动服务${NC}"
    docker-compose -f docker-compose.yml -f "${DEV_COMPOSE_FILE}" up -d || {
        echo -e "${RED}服务启动失败${NC}"
        exit 1
    }
else
    echo -e "${BLUE}直接启动容器${NC}"
    docker run -d \
        --name "${CONTAINER_NAME}" \
        --restart unless-stopped \
        -p 25694:8080 \
        -p 7001:7001 \
        -v "$(pwd)/../backend:/app/backend:rw" \
        -v "$(pwd)/../frontend:/app/frontend:rw" \
        -v "$(pwd)/config:/app/config:ro" \
        -v "$(pwd)/logs:/app/logs:rw" \
        --env-file .env \
        "${FULL_IMAGE_NAME}" || {
        echo -e "${RED}容器启动失败${NC}"
        exit 1
    }
fi

echo -e "${GREEN}服务启动成功!${NC}"

# 等待服务启动
echo -e "${BLUE}等待服务启动...${NC}"
sleep 10

# 检查服务状态
echo -e "${BLUE}检查服务状态...${NC}"
docker ps | grep "${CONTAINER_NAME}"

# 显示访问信息
echo -e "${GREEN}=== 访问信息 ===${NC}"
echo -e "${GREEN}前端界面: http://localhost:25694${NC}"
echo -e "${GREEN}后端API: http://localhost:7001/api${NC}"
echo -e "${GREEN}WebSocket: ws://localhost:7001/ws${NC}"

# 显示管理命令
echo -e "${GREEN}=== 管理命令 ===${NC}"
echo -e "${YELLOW}查看日志: docker logs -f ${CONTAINER_NAME}${NC}"
echo -e "${YELLOW}进入容器: docker exec -it ${CONTAINER_NAME} /bin/bash${NC}"
echo -e "${YELLOW}停止服务: ./stop.sh${NC}"
echo -e "${YELLOW}重启服务: ./run.sh${NC}"

# 健康检查
echo -e "${BLUE}执行健康检查...${NC}"
./scripts/health-check.sh || echo -e "${YELLOW}健康检查完成，部分服务可能还在启动中${NC}"

echo -e "${GREEN}开发环境启动完成!${NC}"